package edu.cebanc.spring.biblioteca.util;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import edu.cebanc.spring.biblioteca.bean.AutorBean;
import edu.cebanc.spring.biblioteca.bean.BajaBean;
import edu.cebanc.spring.biblioteca.bean.EditorialBean;
import edu.cebanc.spring.biblioteca.bean.EjemplarBean;
import edu.cebanc.spring.biblioteca.bean.GeneroBean;
import edu.cebanc.spring.biblioteca.bean.IdiomaBean;
import edu.cebanc.spring.biblioteca.bean.LibroBean;
import edu.cebanc.spring.biblioteca.bean.UsuarioBean;
import edu.cebanc.spring.biblioteca.domain.Autor;
import edu.cebanc.spring.biblioteca.domain.Baja;
import edu.cebanc.spring.biblioteca.domain.Editorial;
import edu.cebanc.spring.biblioteca.domain.Ejemplar;
import edu.cebanc.spring.biblioteca.domain.Genero;
import edu.cebanc.spring.biblioteca.domain.Idioma;
import edu.cebanc.spring.biblioteca.domain.Libro;
import edu.cebanc.spring.biblioteca.domain.Usuario;

public class DataParser {
	
	public Usuario fromUsuarioBeanToUsuario(UsuarioBean usuario){
		Usuario result = new Usuario();
		
		result.setId_usuario(usuario.getId_usuario());
		result.setApellidos(usuario.getApellidos());
		result.setCalle(usuario.getCalle());
		result.setCcaa(usuario.getCcaa());
		result.setCiudad(usuario.getCiudad());
		result.setCp(usuario.getCp());
		result.setEmail(usuario.getEmail());
		result.setInstrucciones(usuario.getInstrucciones());
		result.setMovil(usuario.getMovil());
		result.setNif(usuario.getNif());
		result.setNombre(usuario.getNombre());
		result.setProvincia(usuario.getProvincia());
		result.setTelefono(usuario.getTelefono());
		
		return result;
	}

	public UsuarioBean fromUsuarioToUsuarioBean(Usuario usuario){
		UsuarioBean result = new UsuarioBean();
		
		result.setId_usuario(usuario.getId_usuario());
		result.setApellidos(usuario.getApellidos());
		result.setCalle(usuario.getCalle());
		result.setCcaa(usuario.getCcaa());
		result.setCiudad(usuario.getCiudad());
		result.setCp(usuario.getCp());
		result.setEmail(usuario.getEmail());
		result.setInstrucciones(usuario.getInstrucciones());
		result.setMovil(usuario.getMovil());
		result.setNif(usuario.getNif());
		result.setNombre(usuario.getNombre());
		result.setProvincia(usuario.getProvincia());
		result.setTelefono(usuario.getTelefono());
		
		return result;
	}

	public List<UsuarioBean> fromUsuarioListToUsuarioBeanList(List<Usuario> usuarios){
		List<UsuarioBean> result = new ArrayList<UsuarioBean>();
		
		for(int i = 0; i < usuarios.size(); i++){
			result.add(this.fromUsuarioToUsuarioBean(usuarios.get(i)));
		}
		
		return result;
	}
	
	public Autor fromAutorBeanToAutor(AutorBean autor){
		Autor result = new Autor();
		
		result.setApellidos(autor.getApellidos());
		result.setId_autor(autor.getId_autor());
		result.setNombre(autor.getNombre());
		
		return result;
	}
	
	public AutorBean fromAutorToAutorBean(Autor autor){
		AutorBean result = new AutorBean();
		
		result.setApellidos(autor.getApellidos());
		result.setId_autor(autor.getId_autor());
		result.setNombre(autor.getNombre());
		
		return result;
	}
	
	public List<AutorBean> fromAutorListToAutorBeanList(List<Autor> autores){
		List<AutorBean> result = new ArrayList<AutorBean>();
		
		for(int i = 0; i < autores.size(); i++){
			result.add(this.fromAutorToAutorBean(autores.get(i)));
		}
		
		return result;
	}

	public Genero fromGeneroBeanToGenero(GeneroBean genero){
		Genero result = new Genero();
		
		result.setId_genero(genero.getId_genero());
		result.setNombre(genero.getNombre());
		
		return result;
	}
	
	public GeneroBean fromGeneroToGeneroBean(Genero genero){
		GeneroBean result = new GeneroBean();
		
		result.setId_genero(genero.getId_genero());
		result.setNombre(genero.getNombre());
		
		return result;
	}
	
	public List<GeneroBean> fromGeneroListToGeneroBeanList(List<Genero> generos){
		List<GeneroBean> result = new ArrayList<GeneroBean>();
		
		for(int i = 0; i < generos.size(); i++){
			result.add(this.fromGeneroToGeneroBean(generos.get(i)));
		}
		
		return result;
	}

	public Idioma fromIdiomaBeanToIdioma(IdiomaBean idioma){
		Idioma result = new Idioma();
		
		result.setId_idioma(idioma.getId_idioma());
		result.setNombre(idioma.getNombre());
		
		return result;
	}
	
	public IdiomaBean fromIdiomaToIdiomaBean(Idioma idioma){
		IdiomaBean result = new IdiomaBean();
		
		result.setId_idioma(idioma.getId_idioma());
		result.setNombre(idioma.getNombre());
		
		return result;
	}
	
	public List<IdiomaBean> fromIdiomaListToIdiomaBeanList(List<Idioma> idiomas){
		List<IdiomaBean> result = new ArrayList<IdiomaBean>();
		
		for(int i = 0; i < idiomas.size(); i++){
			result.add(this.fromIdiomaToIdiomaBean(idiomas.get(i)));
		}
		
		return result;
	}

	public Editorial fromEditorialBeanToEditorial(EditorialBean editorial){
		Editorial result = new Editorial();
		
		result.setId_editorial(editorial.getId_editorial());
		result.setNombre(editorial.getNombre());
		
		return result;
	}
	
	public EditorialBean fromEditorialToEditorialBean(Editorial editorial){
		EditorialBean result = new EditorialBean();
		
		result.setId_editorial(editorial.getId_editorial());
		result.setNombre(editorial.getNombre());
		
		return result;
	}
	
	public Ejemplar fromEjemplarBeanToEjemplar(EjemplarBean ejemplar){
		Ejemplar result = new Ejemplar();
		
		result.setId_ejemplar(ejemplar.getId_ejemplar());
		result.setEstado(ejemplar.getEstado());
		result.setTitulo(ejemplar.getTitulo());
		result.setFecha_alta(ejemplar.getFecha_alta());
		if(ejemplar.getIdioma() != null)
			result.setIdioma(this.fromIdiomaBeanToIdioma(ejemplar.getIdioma()));
		if(ejemplar.getEditorial() != null)
			result.setEditorial(this.fromEditorialBeanToEditorial(ejemplar.getEditorial()));
		if(ejemplar.getBaja() != null){
			result.setBaja(this.fromBajaBeanToBaja(ejemplar.getBaja()));
		}
		return result;
	}
	
	public EjemplarBean fromEjemplarToEjemplarBean(Ejemplar ejemplar){
		EjemplarBean result = new EjemplarBean();
		
		result.setId_ejemplar(ejemplar.getId_ejemplar());
		result.setEstado(ejemplar.getEstado());
		result.setTitulo(ejemplar.getTitulo());
		result.setFecha_alta(ejemplar.getFecha_alta());
		result.setIdioma(this.fromIdiomaToIdiomaBean(ejemplar.getIdioma()));
		result.setEditorial(this.fromEditorialToEditorialBean(ejemplar.getEditorial()));
		if(ejemplar.getBaja() != null){
			result.setBaja(this.fromBajaToBajaBean(ejemplar.getBaja()));
		}
		return result;
	}
	
	public List<EjemplarBean> fromEjemplarListToEjemplarBeanList(List<Ejemplar> ejemplares){
		List<EjemplarBean> result = new ArrayList<EjemplarBean>();
		
		for(int i = 0; i < ejemplares.size(); i++){
			result.add(this.fromEjemplarToEjemplarBean(ejemplares.get(i)));
		}
		
		return result;
	}
	
	public List<EditorialBean> fromEditorialListToEditorialBeanList(List<Editorial> editoriales){
		List<EditorialBean> result = new ArrayList<EditorialBean>();
		
		for(int i = 0; i < editoriales.size(); i++){
			result.add(this.fromEditorialToEditorialBean(editoriales.get(i)));
		}
		
		return result;
	}
	
	public Libro fromLibroBeanToLibro(LibroBean libro){
		Libro result = new Libro();
		
		result.setId_libro((libro.getId_libro()));
		result.setIsbn(libro.getIsbn());
		result.setFecha(libro.getFecha());
		for (int i = 0; i < libro.getAutores().size(); i++){
			result.getAutores().add(this.fromAutorBeanToAutor(libro.getAutores().get(i)));
		}
		for (int i = 0; i < libro.getGeneros().size(); i++){
			result.getGeneros().add(this.fromGeneroBeanToGenero(libro.getGeneros().get(i)));
		}
		for (int i = 0; i < libro.getEjemplares().size(); i++){
			result.getEjemplares().add(this.fromEjemplarBeanToEjemplar(libro.getEjemplares().get(i)));
		}
		return result;
	}
	
	public LibroBean fromLibroToLibroBean(Libro libro){
		LibroBean result = new LibroBean();
		
		result.setId_libro((libro.getId_libro()));
		result.setIsbn(libro.getIsbn());
		result.setFecha(libro.getFecha());
		
		Iterator it = libro.getAutores().iterator();
		
		while(it.hasNext()){
			result.getAutores().add(this.fromAutorToAutorBean((Autor)it.next()));
		}
		
		it = libro.getGeneros().iterator();
		
		while(it.hasNext()){
			result.getGeneros().add(this.fromGeneroToGeneroBean((Genero)it.next()));
		}
		
		it = libro.getEjemplares().iterator();
		
		while(it.hasNext()){
			result.getEjemplares().add(this.fromEjemplarToEjemplarBean((Ejemplar)it.next()));
		}
		
		return result;
	}
	
	public List<LibroBean> fromLibrolListToLibroBeanList(List<Libro> libros){
		List<LibroBean> result = new ArrayList<LibroBean>();
		
		for(int i = 0; i < libros.size(); i++){
			result.add(this.fromLibroToLibroBean(libros.get(i)));
		}
		
		return result;
	}
	
	public Baja fromBajaBeanToBaja(BajaBean baja){
		Baja result = new Baja();
		
		result.setFecha(baja.getFecha());
		result.setId_ejemplar(baja.getId_ejemplar());
		result.setObservaciones(baja.getObservaciones());
		
		return result;
	}
	
	public BajaBean fromBajaToBajaBean(Baja baja){
		BajaBean result = new BajaBean();
		
		result.setFecha(baja.getFecha());
		result.setId_ejemplar(baja.getId_ejemplar());
		result.setObservaciones(baja.getObservaciones());
		
		return result;
	}
}
